package com.bp.system.service;

import java.io.IOException;
import java.util.List;

import com.bp.common.exception.file.FileNameLengthLimitExceededException;
import com.bp.common.exception.file.FileSizeLimitExceededException;
import com.bp.common.exception.file.InvalidExtensionException;
import com.bp.system.domain.SysFileDomain;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件存储Service接口
 *
 * @author shaominjie
 * @date 2021-01-13
 */
public interface ISysFileService {
    /**
     * 查询文件存储
     *
     * @param fileId 文件存储ID
     * @return 文件存储
     */
    public SysFileDomain selectById(Long fileId);

    /**
     * 查询文件存储列表
     *
     * @param sysFileDomain 文件存储
     * @return 文件存储集合
     */
    public List<SysFileDomain> selectList(SysFileDomain sysFileDomain);

    List<SysFileDomain> selectListWithChild(SysFileDomain sysFileDomain);

    /**
     * 新增文件存储
     *
     * @param sysFileDomain 文件存储
     * @return 结果
     */
    public int insert(SysFileDomain sysFileDomain);

    /**
     * 修改文件存储
     *
     * @param sysFileDomain 文件存储
     * @return 结果
     */
    public int update(SysFileDomain sysFileDomain);

    /**
     * 批量删除文件存储
     *
     * @param fileIds 需要删除的文件存储ID
     * @return 结果
     */
    public int deleteByIds(Long[] fileIds);

    /**
     * 删除文件存储信息
     *
     * @param fileId 文件存储ID
     * @return 结果
     */
    public int deleteById(Long fileId);


    /**
     * 获取当前目录下的文件
     * @param indexId
     * @return
     */
    List<SysFileDomain> selectByIndexId(Long indexId);

    public String upload(String baseDir, MultipartFile file, String[] allowedExtension)
            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
            InvalidExtensionException;

    /**
     * 获取同目录下同名文件
     * @param indexId
     * @param originalFilename
     * @return
     */
    SysFileDomain selectByFileName(Long indexId, String originalFilename);

    /**
     * 根据id获取文件
     * @param fileIds
     * @return
     */
    List<SysFileDomain> selectByIds(String fileIds);

    /**
     * 通过id集合进行过滤
     * @param fileDomain
     * @param fileIds
     * @return
     */
    List<SysFileDomain> selectListWithChildEx(SysFileDomain fileDomain, String fileIds);
    /**
     * 通过id集合进行过滤
     * @param fileDomain
     * @param fileIds
     * @return
     */
    List<SysFileDomain> selectListEx(SysFileDomain fileDomain, String fileIds);
}